package com.zhangxin.aiInterview.manager.xfapi.http;

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
 * 讯飞公共接口服务(根据简历成笔试-Web)
 */
@Component
public class GenerateExamQuestionApi {
    // 静态变量缓存 Prompt（仅初始化一次）
    private static final String SYSTEM_PROMPT;

    static {
        // 初始化 System Prompt
        SYSTEM_PROMPT = "你是一位笔试出题专家，根据用户提供面试公司、面试岗位和面试的身份，生成这个公司的这个岗位，对应用户面试身份的笔试题，\n" +
                "生成笔试题的要求为：\"生成10个选择题，6个问答题 2个编程题 \" +\n" +
                "                \"##要求：生成选择题题目、问答题题目、编程题题目，返回的数据为json格式，按照如下要求返回数据 type等于1是选择题，type等于2是问答题，type等于3是编程题 。\" +\n" +
                "                \"[ { \"type\": 1, \"question\": [ { \"title\": \"题目标题\", \"option\": [ {\"value\": \"选项内容\", \"key\": \"A\"}, {\"value\": \"选项内容\", \"key\": \"B\"} ], \"correct_answer\": \"正确选项\", \"correct_answer_content\": \"正确选项内容\"} ] }, { \"type\": 2, \"question\": [\"问答题1\", \"问答题2\"] }, { \"type\": 3, \"question\": [\"编程题(包括编程题题目，题目描述，输入用例，输出用例，全部放在一个字符串中)\",\"编程题(包括编程题题目，题目描述，输入用例，输出用例，全部放在一个字符串中)\"] } ] \" +\n" +
                "                \"##注意：" + "\n"+
                "                1. 严格按照我提供的格式返回数据" + "\n"+
                "                2. 一共生成的题目数量是18道题目不要超过" + "\n"+
                "                3. 编程题题目中必须包含编程题题目，题目描述，输入用例，输出用例，全部放在一个字符串中" + "\n" +
                "                4. 生成的所有题目(选择题，问答题，编程题)都必须要和用户面试的岗位有关系" + "\n" +
                "                5. 问答题部分除了包含技术问答题还需要有系统设计题" + "\n" +
                "                6. 一定要返回标准的json数据格式，引号使用英文的引号";
    }

    @Value("${xunfei.apiPassword}")
    private String apiPassword;

    /**
     * 生成笔试题
     *
     * @param position 面试岗位
     * @param interviewRole 面试角色
     * @return
     */
    public String getExamQuestions(String position, String interviewRole,String company) {
        // 1. 请求地址和Headers
        String url = "https://spark-api-open.xf-yun.com/v1/chat/completions";

        // 2. 构造请求体（JSON）
        JSONObject requestBody = new JSONObject();
        requestBody.set("model", "generalv3.5");

        //构造用户prompt
        JSONArray messages = new JSONArray();
        messages.add(new JSONObject().set("role", "system").set("content", SYSTEM_PROMPT));
        messages.add(new JSONObject().set("role", "user").set("content", "笔试公司："+company+"  笔试岗位："+position+"  笔试身份："+interviewRole));

        requestBody.set("messages", messages);
        requestBody.set("top_p", 0.8);

        // 3. 发送请求
        String jsonStr = HttpRequest.post(url)
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer " + apiPassword)
                .body(requestBody.toString())
                .execute()
                .body();
        JSONObject rootObj = JSONUtil.parseObj(jsonStr);
        return (String)rootObj.getByPath("choices[0].message.content");
    }
}
